//
//  UserModel.swift
//  SitPosition
//
//  Created by apple on 2018/12/22.
//  Copyright © 2018 apple. All rights reserved.
//

import Foundation


/**
 * 用户角色
 */
enum UserRole : String {
    case parent = "parent"
    case student = "student"
}

/**
 * 访问Token模型
 */
struct AccessToken : Codable {
    let access_token: String    // 表示访问令牌
    let token_type: String?     // 表示令牌类型，该值大小写不敏感，可以是bearer类型或mac类型
    let refresh_token: String?  // 表示更新令牌，用来获取下一次的访问令牌
    let expires_in: Int64?      // 表示过期时间，单位为秒
    let scope: String?          // 表示权限范围
    
    // Token是否有效?
    var isValid: Bool {
        return !access_token.isEmpty
    }
}

/**
 * 用户模型
 */
struct User : Codable {
    
    struct Authority : Codable {
        let authority: String?
    }
    
    struct IMAccount : Codable {
        let id: String          // 环信id
        let password: String    // 环信密码
        let nickname: String?   // 环信昵称
        let type: String        // 环信账号类型：家长、学生
        
        var userRole: UserRole {
            return UserRole(rawValue: type) ?? .student
        }
    }
    
    let id: String?             // ID
    let account: String         // 用户名
    let avatar: String?         // 头像
    let level: Int?             // 等级
    let status: Int?            // 状态
    let mobile: String?         // 手机号码
    let router: String?         // 个人主页路由
    let sex: String?            // 性别: f/m/x
    let birthDate: Int64?       // 生日
    let email: String?          // 邮箱
    let identityCard: String?   // 身份证
    let cityId: String?         // 城市ID
    let cityName: String?       // 城市名称
    let introduce: String?      // 个人简介
    let newUser: Bool?          // 是否新用户
    let recommendCode: String?  // 推荐码
    var accessToken: AccessToken// token信息
    let authorities: [Authority]?
    let ringAccount: [IMAccount]?
    
    // 判断Token是否有效
    var isTokenValid: Bool {
        return accessToken.isValid
    }
    
    // 获取当前用户的聊天ID
    var studentIMAccount: IMAccount? {
        return ringAccount?.first { $0.userRole == UserRole.student }
    }
    
    // 获取IM对端的聊天ID
    var parentIMAccount: IMAccount? {
        return ringAccount?.first { $0.userRole == UserRole.parent }
    }
}
